/**
 * @addtogroup gbc_msg_17691
 * gbc_17691_ds_public_comp
 * @brief        标准国六数据流编解码公共组件
 * @par 示例
 * @code
   // 该组件实现了国标数据流编解码的接口,各地标可以在此基础上进行扩展

   // 创建管理器
   TGbc17691Mgr mgr;
   TGbc17691MsgStreamItem stream_item[2];
   TGbc17691EngineStream es; ///< 发动机数据流对象
   TGbc17691ExtDataSd ext_data; ///< 扩展数据流对象
   TGbc17691DataStreamPublicComp ds_public; ///< 标准国六数据流编解码组件
   UInt8 buf[1024]; ///< 存放编码的缓冲区

   TGbc17691MgrCreate(&mgr, kGbc17691ProtocolSd, 1, kGbc17691ETypeNotEncrypt);
   ...///< 设置管理器属性和事件

   // 获取数据流编解码接口
   TGbc17691DataStreamPublicCompCreate(&ds_public);
   mgr.data_stream_codec = TGbc17691DataStreamPublicCompInterface(&ds_public);

   // 构建数据流消息对象
    TGbc17691MsgStreamCreate(&msg_stream, kPt17691UploadTypeReal);
    MfGetLocalTime(&st); ///< 获取采集时间
    TransMfTimeToByte(&st, msg_stream.collect_time, sizeof(msg_stream.collect_time));
    msg_stream.msg_seq = TGbc17691MgrMsgSeqId(mgr);

    // 构建数据流
    memset(&es, 0xff, sizeof(es)); ///< 这里为了测试把数据全置为FF,实际应用中应填入总线读取到的数据
    memset(&ext_data, 0x11, sizeof(ext_data));

    stream_item[0].msg_type = kPt17691MsgTypeDataStream;
    stream_item[0].msg_stream = &es;

    stream_item[1].msg_type = kPt17691MsgTypeDataStreamReplenish;
    stream_item[1].msg_stream = &ext_data;

    msg_stream.msg_count = 2;
    msg_stream.stream_item = &stream_item[0];

    enc_len = TGbc17691MsgEncode((TGbc17691Msg *)&msg_stream, &mgr, buf, sizeof(buf));
   ...
 * @endcode
 * @{
 */
 /**
  * @file         gbc_17691_ds_public_comp.h
  * @brief        标准国六数据流编解码公共组件
  * @note
  * @author       dengdeshou
  * @date         2020-09-16
  * @version      1.0
  *
  * @par          修改日志
  * <table>
  * <tr><th>Date        <th>Version               <th>Author          <th>Description
  * <tr><td>2020-09-16  <td>1.0                   <td>Dengdeshou      <td>创建初始版本
  * @copyright    杭州鸿泉物联网技术股份有限公司
  */

#ifndef _SCC_PT17691_DS_PUBLIC_COMP_H_
#define _SCC_PT17691_DS_PUBLIC_COMP_H_

#include "ofc/ofc_types.h"
#include "ofc/ofc_object.h"
#include "gbmsg17691/gbc_17691_ds_interface.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * 标准国六数据流编解码组件
 */
typedef struct TGbc17691DataStreamPublicCompTag TGbc17691DataStreamPublicComp;
struct TGbc17691DataStreamPublicCompTag
{
PRIVATE
    IGbc17691DataStream ds_interface_;
};

/**
 * 构造函数
 * @param self: 对象自身指针
 * @return
 */
void TGbc17691DataStreamPublicCompCreate(TGbc17691DataStreamPublicComp *self);

/**
 * 析构函数
 * @param self: 对象指针
 * @return
 */
void TGbc17691DataStreamPublicCompDestroy(TGbc17691DataStreamPublicComp *self);

/**
 * 获取数据流编解码接口指针
 * @param self: 对象指针
 * @return
 */
IGbc17691DataStream *TGbc17691DataStreamPublicCompInterface(TGbc17691DataStreamPublicComp *self);

#ifdef __cplusplus
}
#endif
#endif
